package com.saver.core.persistence;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.util.Log;

import com.saver.core.domain.MonedaEquiv;
import com.saver.core.processor.util.Util;
import com.saver.core.util.Constantes;

public class MonedaEquivSQLite extends DatabaseHelper {
	
	private static final String TAG = "MonedaEquivSQLite";
	private static final String TABLA = "MONEDAS_EQUIV";
	private static final String COL_ID_MONEDA_EQUIV = "ID_MONEDA_EQUIV";
	private static final String COL_ID_MONEDA = "ID_MONEDA";
	private static final String COL_NOMBRE = "NOMBRE";
	private static final String COL_ID_SERVIDOR = "ID_SERVIDOR";
	private static final String[] COLUMNAS = new String []{COL_ID_MONEDA_EQUIV, 
		COL_ID_MONEDA, COL_ID_SERVIDOR, COL_NOMBRE};

	public MonedaEquivSQLite (Context context) {
		super(context, Constantes.DATABASE_NAME, null, Constantes.DATABASE_VERSION);
	}
	
	public void guardar (MonedaEquiv monedaEquiv) {
		SQLiteDatabase db = getWritableDatabase();
		
		ContentValues values = new ContentValues();
		values.put(COL_ID_MONEDA, monedaEquiv.getIdMoneda());
		values.put(COL_ID_SERVIDOR, monedaEquiv.getIdServidor());
		values.put(COL_NOMBRE, monedaEquiv.getNombre());
		
		int id = (int)db.insert(TABLA, null, values);
		monedaEquiv.setId(id);
		db.close();
		Log.d(TAG, "CategoriaEquiv guardada");
	}
	
	public void actualizar (MonedaEquiv monedaEquiv) {
		Log.d(TAG, "actualizar monedaEquiv");
		
		SQLiteDatabase db = getWritableDatabase();
		
		ContentValues values = new ContentValues();
		values.put(COL_ID_MONEDA, monedaEquiv.getIdMoneda());
		values.put(COL_ID_SERVIDOR, monedaEquiv.getIdServidor());
		values.put(COL_NOMBRE, monedaEquiv.getNombre());
		db.update(TABLA, values, COL_ID_MONEDA_EQUIV + "=?", 
				new String[]{monedaEquiv.getId().toString()});
		
		db.close();
		Log.d(TAG, "monedaEquiv actuaizada");
	}
	
	public MonedaEquiv buscarPorId (Integer id) {
		Log.i(TAG, "buscarPorId: " + id);
		
		MonedaEquiv monedaEquiv = null;
		if (id != null) {
			SQLiteDatabase db = getReadableDatabase();
			Cursor cursor = db.query(TABLA, COLUMNAS, COL_ID_MONEDA_EQUIV + "=?", 
					new String[]{id.toString()}, null, null, null);
			
			if (cursor.moveToNext()) {
				monedaEquiv = crearMonedaEquiv(cursor);
			}
			
			db.close();
		}
		return monedaEquiv;
	}
	
	public MonedaEquiv buscarPorIdServ (Integer id) {
		Log.i(TAG, "buscarPorIdServ: " + id);
		
		MonedaEquiv monedaEquiv = null;
		if (id != null) {
			SQLiteDatabase db = getReadableDatabase();
			Cursor cursor = db.query(TABLA, COLUMNAS, COL_ID_SERVIDOR + "=?", 
					new String[]{id.toString()}, null, null, null);
			
			if (cursor.moveToNext()) {
				monedaEquiv = crearMonedaEquiv(cursor);
			}
			
			db.close();
		}
		return monedaEquiv;
	}
	
	public MonedaEquiv buscarPorNombre (String nombre) {
		Log.i(TAG, "buscarPorNombre: " + nombre);
		
		MonedaEquiv monedaEquiv = null;
		if (!Util.esVacio(nombre)) {
			SQLiteDatabase db = getReadableDatabase();
			Cursor cursor = db.query(TABLA, COLUMNAS, COL_NOMBRE + "=?", 
					new String[]{nombre}, null, null, null);
			
			if (cursor.moveToNext()) {
				monedaEquiv = crearMonedaEquiv(cursor);
			}
			
			db.close();
		}
		return monedaEquiv;
	}

	private MonedaEquiv crearMonedaEquiv(Cursor cursor) {
		MonedaEquiv monedaEquiv = new MonedaEquiv();
		monedaEquiv.setId(cursor.getInt(0));
		if (!cursor.isNull(1)) {
			monedaEquiv.setIdMoneda(cursor.getInt(1));
		}
		if (!cursor.isNull(2)) {
			monedaEquiv.setIdServidor(cursor.getInt(2));
		}
		monedaEquiv.setNombre(cursor.getString(3));
		return monedaEquiv;
	}

}
